function x=gausslineqn(A,b,n)
for k=1:n-1
    a=abs(A(k,k));
    a_index=k;
    for i=k+1:n
        if a<abs(A(i,k))
            a=abs(A(i,k));
            a_index=i;
        end
    end
    if a==0
        error('系数矩阵A奇异');
    else
        if k~=a_index
            for j=1:n
                t=A(a_index,j);
                A(a_index,j)=A(k,j);
                A(k,j)=t;       
            end
            t=b(a_index);
            b(a_index)=b(k);
            b(k)=t;
        end
    end
    m=zeros(n,n);
    for i=k+1:n
        m(i,k)=A(i,k)/A(k,k);
        A(i,k)=m(i,k);
    end
    for i=k+1:n
        for j=k+1:n
            A(i,j)=A(i,j)-m(i,k)*A(k,j);
        end
        b(i)=b(i)-m(i,k)*b(k);
    end
end
for i=n:-1:1
    sum=0;
    for j=i+1:n
        sum=sum+A(i,j)*b(j);
    end
%     if abs(A(i,i))<10e-10
%         error('系数矩阵A奇异');
%         %计算机进行数值计算带来的误差，会使有些原本奇异的矩阵经过列主元的选取变换后
%         %得到的上三角矩阵，其对角线元素十分接近0，此时我们认为该矩阵就是奇异的。
%     end
    b(i)=(b(i)-sum)/A(i,i);
end
x=b;
end
